import axios from 'axios'
import config from './config.js'

// 此文件处理所有异步请求
const request = {  
  // 获取AutoTile
  getAutoTile () {
    return new Promise((resolve, reject) => {
      axios.get(config.apiPath + 'getAutoTile', {
        params: {}
      })
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  },
  
  // 添加AutoTile
  addAutoTile (autotile) {
    return new Promise((resolve, reject) => {
      axios.post(config.apiPath + 'addAutoTile', {}).then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  },
  
  // 删除Autotile
  deleteAutoTile (autotile) {
    return new Promise((resolve, reject) => {
      axios.post(config.apiPath + 'deleteAutoTile', {
        autotile: autotile
      })
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  },
  
  // 获取所有Tileset
  getTileset () {
    return new Promise((resolve, reject) => {
      axios.get(config.apiPath + 'getTileset', {
        params: {}
      })
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  },
  
  // 添加Tileset
  addTileset (data) {
    return new Promise((resolve, reject) => {
      axios.post(config.apiPath + 'addTileset', data)
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  },
  
  // 删除Tileset
  deleteTileset (name) {
    return new Promise((resolve, reject) => {
      axios.post(config.apiPath + 'deleteTileset', {
        name: name
      })
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  },
  
  // 重命名Tileset
  renameTileset (oldName, newName) {
    return new Promise((resolve, reject) => {
      axios.post(config.apiPath + 'renameTileset', {
        oldName: oldName,
        newName: newName
      })
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  },
  
  // 获取图集详细
  getTilesetImages (tileset) {
    return new Promise((resolve, reject) => {
      axios.get(config.apiPath + 'getTilesetImages', {
        params: {
          tileset: tileset
        }
      })
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  },
  
  // 删除图集图块
  deleteTilesetImages (tileset, images) {
    return new Promise((resolve, reject) => {
      axios.post(config.apiPath + 'deleteTilesetImages', {
        tileset: tileset,
        images: images
      })
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  },
  
  // 获取Env
  getEnv () {
    return new Promise((resolve, reject) => {
      axios.get(config.apiPath + 'getEnv', {
        params: {}
      })
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  },
  
  // 添加Env
  addEnv (env) {
    return new Promise((resolve, reject) => {
      axios.post(config.apiPath + 'addEnv', {
        env: env
      })
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  },
  
  // 删除Env
  deleteEnv (env) {
    return new Promise((resolve, reject) => {
      axios.post(config.apiPath + 'deleteEnv', {
        env: env
      })
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  },
  
  // 改名Env
  renameEnv (oldName, newName) {
    return new Promise((resolve, reject) => {
      axios.post(config.apiPath + 'renameEnv', {
        oldName: oldName,
        newName: newName
      })
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  },
  
  // 获取Env详细信息
  getEnvDetail (env) {
    return new Promise((resolve, reject) => {
      axios.get(config.apiPath + 'getEnvDetail', {
        params: {
          env: env
        }
      })
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  },
  
  // 为Env匹配图集
  setEnvTiles (tileset, env) {
    return new Promise((resolve, reject) => {
      axios.post(config.apiPath + 'setEnvTiles', {
        tileset: tileset,
        env: env
      })
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  },
  
  // 为Env匹配Autotile
  setEnvAutotile (autotile, env) {
    return new Promise((resolve, reject) => {
      axios.post(config.apiPath + 'setEnvAutotile', {
        autotile: autotile,
        env: env
      })
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  },
  
  // 保存Env
  setEnv (data, env) {
    return new Promise((resolve, reject) => {
      axios.post(config.apiPath + 'setEnv', {
        data: data,
        env: env
      })
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  },
  
  // 获取地图
  getMaps () {
    return new Promise((resolve, reject) => {
      axios.get(config.apiPath + 'getMaps', {
        params: {}
      })
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  },
  
  // 添加地图
  addMap (parentId, name) {
    return new Promise((resolve, reject) => {
      axios.post(config.apiPath + 'addMap', {
        parentId: parentId,
        name: name
      })
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  },
  
  // 更名地图
  renameMap (id, newName) {
    return new Promise((resolve, reject) => {
      axios.post(config.apiPath + 'renameMap', {
        id: id,
        newName: newName
      })
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  },
  
  // 删除地图
  deleteMap (id) {
    return new Promise((resolve, reject) => {
      axios.post(config.apiPath + 'deleteMap', {
        id: id
      })
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  },
  
  // 打开地图
  getMapFile (id) {
    return new Promise((resolve, reject) => {
      axios.get(config.apiPath + 'getMapFile', {
        params: {
          id: id
        }
      })
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  },
  
  // 添加地图文件
  addMapFile (id, settings) {
    return new Promise((resolve, reject) => {
      axios.post(config.apiPath + 'addMapFile', {
        id: id,
        settings: settings
      })
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  },
  
  // 获取地图的预备资源
  getMapPreparations (preparations) {
    return new Promise((resolve, reject) => {
      axios.post(config.apiPath + 'getMapPreparations', {
        preparations: preparations
      })
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  },
  
  setMapDetail (id, data) {
    return new Promise((resolve, reject) => {
      axios.post(config.apiPath + 'setMapDetail', {
        id: id,
        data: data
      })
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  },
  
  output () {
    return new Promise((resolve, reject) => {
      axios.post(config.apiPath + 'output', {}).then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err)
      })
    })
  }
}

export default request